<?php
require_once 'ReactivoOpcionMultiple.class.php';
require_once 'ReactivoCaneva.class.php';
require_once 'ReactivoVF.class.php';

class ReactivoProvider {

    public static function saveReactivo(Reactivo $reactivo) {

		$registry = Zend_Registry :: getInstance();
		$config = $registry->config;

		$db = Zend_Db :: factory('Mysqli', array (
			'host' => $config->database->host,
			'username' => $config->database->username,
			'password' => $config->database->password,
			'dbname' => $config->database->name
		));

		$db->insert('REACTIVO',$reactivo->toDbArray());
		$id = $db->lastInsertId();
		switch($reactivo->getTipo()){
			case '1':
				foreach($reactivo->getRespuestas() as $respuesta){
					$arrayInsert = array (
					'REACTIVO_ID' => $id,
					'REACTIVO_TIPO' => $reactivo->getTipo(),
					'REACTIVO_OPCIONES_RESPUESTA_CORRECTA' => $respuesta->getCorrecto(),
					'REACTIVO_OPCIONES_RESPUESTA' => $respuesta->getRespuesta());
					$db->insert('REACTIVO_OPCIONES',$arrayInsert);
				}
				break;
			case '2':
				foreach($reactivo->getRespuestas() as $respuesta){
					$arrayInsert = array (
					'REACTIVO_ID' => $id,
					'REACTIVO_TIPO' => $reactivo->getTipo(),
					'REACTIVO_OPCIONES_RESPUESTA_CORRECTA' => $respuesta->getCorrecto(),
					'REACTIVO_OPCIONES_RESPUESTA' => $respuesta->getRespuesta());
					$db->insert('REACTIVO_OPCIONES',$arrayInsert);
				}
				break;
			case '3':
				$arrayInsert = array (
				'REACTIVO_ID' => $id,
				'REACTIVO_TIPO' => $reactivo->getTipo(),
				'REACTIVO_CANEVA_RESPUESTA' => $reactivo->getRespuesta());
				$db->insert('REACTIVO_CANEVA',$arrayInsert);
				break;
			case '4':
				$arrayInsert = array (
				'REACTIVO_ID' => $id,
				'REACTIVO_TIPO' => $reactivo->getTipo(),
				'REACTIVO_VF_RESPUESTA' => $reactivo->getRespuesta());
				$db->insert('REACTIVO_VF',$arrayInsert);
				break;
		}
	}

	public static function getReactivoAleatorio($tipo, $habilidad, $nivel) {

		$registry = Zend_Registry :: getInstance();
		$config = $registry->config;

		$db = Zend_Db :: factory('Mysqli', array (
		'host' => $config->database->host,
		'username' => $config->database->username,
		'password' => $config->database->password,
		'dbname' => $config->database->name
		));


				/*$sql = 'SELECT * FROM REACTIVO WHERE REACTIVO_TIPO = ?';
				$result = $db->fetchAll($sql, $tipo);
				echo $result[0]->REACTIVO_PREGUNTA;*/
		$rs = $db->fetchAssoc('SELECT * FROM REACTIVO WHERE REACTIVO_TIPO = '.$tipo.' AND REACTIVO_HABILIDAD = '.$habilidad.' AND REACTIVO_NIVEL = '.$nivel);
		$indice = rand(0,count($rs)-1);
		$contador=0;

		foreach($rs as $row){
			if($contador==$indice){
				$id = $row['REACTIVO_ID'];
				$pregunta= $row['REACTIVO_PREGUNTA'];
			}
			$contador++;
		}

		switch($tipo)
		{
			case '1':
			case '2':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_OPCIONES WHERE REACTIVO_ID = '.$id);
				$reactivoAleatorio= new ReactivoOpcionMultiple();
				foreach($rs2 as $r)
				{
					switch($r['REACTIVO_OPCIONES_RESPUESTA_CORRECTA'])
					{
						case '0':
							$res = new RespuestaReactivoOpcionMultiple($r['REACTIVO_OPCIONES_RESPUESTA'],false);
							break;
						case '1':
							$res = new RespuestaReactivoOpcionMultiple($r['REACTIVO_OPCIONES_RESPUESTA'],true);
							break;
					}
					$res->setId($r['REACTIVO_OPCIONES_ID']);
					$reactivoAleatorio->addRespuesta($res);
				}
				break;
			case '3':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_CANEVA WHERE REACTIVO_ID = '.$id);
				$reactivoAleatorio= new ReactivoCaneva();
				foreach($rs2 as $r)
					$reactivoAleatorio->setRespuesta($r['REACTIVO_CANEVA_RESPUESTA']);
				break;
			case '4':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_VF WHERE REACTIVO_ID = '.$id);
				$reactivoAleatorio= new ReactivoVF();
				foreach($rs2 as $r)
					switch($r['REACTIVO_VF_RESPUESTA'])
					{
						case'0':
							$reactivoAleatorio->setRespuesta(false);
							break;
						case'1':
							$reactivoAleatorio->setRespuesta(true);
							break;
					}
				break;
		}
		$reactivoAleatorio->setTipo($tipo);
		$reactivoAleatorio->setHabilidad($habilidad);
		$reactivoAleatorio->setNivel($nivel);
		$reactivoAleatorio->setPregunta($pregunta);
		$reactivoAleatorio->setId($id);
		//print_r($reactivoAleatorio);
		return $reactivoAleatorio;
	}

	public static function getReactivoById($Id) {

		$registry = Zend_Registry :: getInstance();
		$config = $registry->config;

		$db = Zend_Db :: factory('Mysqli', array (
		'host' => $config->database->host,
		'username' => $config->database->username,
		'password' => $config->database->password,
		'dbname' => $config->database->name
		));


				/*$sql = 'SELECT * FROM REACTIVO WHERE REACTIVO_TIPO = ?';
				$result = $db->fetchAll($sql, $tipo);
				echo $result[0]->REACTIVO_PREGUNTA;*/
		$rs = $db->fetchAssoc('SELECT * FROM REACTIVO WHERE REACTIVO_ID = '.$Id);

		$pregunta= $rs[$Id]['REACTIVO_PREGUNTA'];
		$habilidad=$rs[$Id]['REACTIVO_HABILIDAD'];
		$nivel=$rs[$Id]['REACTIVO_NIVEL'];
		$tipo=$rs[$Id]['REACTIVO_TIPO'];

		switch($tipo)
		{
			case '1':
			case '2':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_OPCIONES WHERE REACTIVO_ID = '.$Id);
				$reactivo= new ReactivoOpcionMultiple();
				foreach($rs2 as $r)
				{
					switch($r['REACTIVO_OPCIONES_RESPUESTA_CORRECTA'])
					{
						case '0':
							$res = new RespuestaReactivoOpcionMultiple($r['REACTIVO_OPCIONES_RESPUESTA'],false);
							break;
						case '1':
							$res = new RespuestaReactivoOpcionMultiple($r['REACTIVO_OPCIONES_RESPUESTA'],true);
							break;
					}
					$res->setId($r['REACTIVO_OPCIONES_ID']);
					$reactivo->addRespuesta($res);
				}
				break;
			case '3':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_CANEVA WHERE REACTIVO_ID = '.$Id);
				$reactivo= new ReactivoCaneva();
				foreach($rs2 as $r)
					$reactivo->setRespuesta($r['REACTIVO_CANEVA_RESPUESTA']);
				break;
			case '4':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_VF WHERE REACTIVO_ID = '.$Id);
				$reactivo= new ReactivoVF();
				foreach($rs2 as $r)
					switch($r['REACTIVO_VF_RESPUESTA'])
					{
						case'0':
							$reactivo->setRespuesta(false);
							break;
						case'1':
							$reactivo->setRespuesta(true);
							break;
					}
				break;
		}
		$reactivo->setTipo($tipo);
		$reactivo->setHabilidad($habilidad);
		$reactivo->setNivel($nivel);
		$reactivo->setPregunta($pregunta);
		$reactivo->setId($Id);
		//print_r($reactivo);
		return $reactivo;
	}

	public static function getReactivos() {

		$registry = Zend_Registry :: getInstance();
		$config = $registry->config;

		$db = Zend_Db :: factory('Mysqli', array (
		'host' => $config->database->host,
		'username' => $config->database->username,
		'password' => $config->database->password,
		'dbname' => $config->database->name
		));
		$rs = $db->fetchAssoc('SELECT * FROM REACTIVO');

		$arrayReactivos = array ();

		foreach ($rs as $row) {
			$pregunta= $row['REACTIVO_PREGUNTA'];
			$habilidad=$row['REACTIVO_HABILIDAD'];
			$nivel=$row['REACTIVO_NIVEL'];
			$tipo=$row['REACTIVO_TIPO'];
			$Id=$row['REACTIVO_ID'];
			switch($tipo)
			{
			case '1':
			case '2':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_OPCIONES WHERE REACTIVO_ID = '.$Id);
				$reactivo= new ReactivoOpcionMultiple();
				foreach($rs2 as $r)
				{
					switch($r['REACTIVO_OPCIONES_RESPUESTA_CORRECTA'])
					{
						case '0':
							$res = new RespuestaReactivoOpcionMultiple($r['REACTIVO_OPCIONES_RESPUESTA'],false);
							break;
						case '1':
							$res = new RespuestaReactivoOpcionMultiple($r['REACTIVO_OPCIONES_RESPUESTA'],true);
							break;
					}
					$res->setId($r['REACTIVO_OPCIONES_ID']);
					$reactivo->addRespuesta($res);
				}
				break;
			case '3':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_CANEVA WHERE REACTIVO_ID = '.$Id);
				$reactivo= new ReactivoCaneva();
				foreach($rs2 as $r)
					$reactivo->setRespuesta($r['REACTIVO_CANEVA_RESPUESTA']);
				break;
			case '4':
				$rs2 = $db->fetchAssoc('SELECT * FROM REACTIVO_VF WHERE REACTIVO_ID = '.$Id);
				$reactivo= new ReactivoVF();
				foreach($rs2 as $r)
					switch($r['REACTIVO_VF_RESPUESTA'])
					{
						case'0':
							$reactivo->setRespuesta(false);
							break;
						case'1':
							$reactivo->setRespuesta(true);
							break;
					}
				break;
			}
			$reactivo->setTipo($tipo);
			$reactivo->setHabilidad($habilidad);
			$reactivo->setNivel($nivel);
			$reactivo->setPregunta($pregunta);
			$reactivo->setId($Id);
			$arrayReactivos[] = $reactivo;
		}
		return $arrayReactivos;
	}
}
?>